查看原文
其他

在L2链冲浪时,零知识证明(ZK-proof)是什么?| Web3学习专栏(4)

0x1984 AllRecode重构 2022-09-11

本文属于重构研究院原创文章,用重构团队成员精选市场上具有前景和学习意义的优秀项目,从项目本身出发带来对行业发展的解读。


Introduction

我,0x1984,今天居然没拖稿。(不去文末点个“在看”不合适了吧?)


最近,我们经常会听到各种 L2协议的内容,包括之前我介绍的 ZK-Rollup 、 OP-Rollup以及跨链桥等,它们可以解决以太坊L1协议的各种问题等等。


ZK(zero knowledge)或者 ZK 证明(Zero Knowledge Proof)听上去特别高深,但是作为普通 web3用户的我们,虽然不需要了解 ZK 证明的细节,但是至少要知道ZK证明到底是怎么回事?这也是本篇知识点专栏中要解决的问题。

 /


什么是ZK证明 (ZKP)?


ZK证明是一种算法,使用密码学来允许某人(证明者)向其他人(验证者)无可辩驳地证明某个事实是真实的,并且在证明过程中,除了具体陈述的事实本身的真实性之外,不需要透露任何额外信息。


在知名网站 “Not Boring “上提供的另一个很好的定义。


ZKP本质上是让某人证明他们知道或拥有什么,而不需要对外泄漏任何关于他们知道或拥有什么的信息。


这到底是什么意思?


我们可以用两个例子来说明一下:


  1. 我可以用ZK证明来证明我拥有重构NFT的事实,而不透露我拥有哪一个,我什么时候买的,或者我花了多少钱买的。


  2. 我可以用ZK证明来证明从我的以太坊账户向你的以太坊账户发送代币的以太坊交易,而不透露任何一个账户的代币余额或发送的金额。


△ 图源网络 

ZK证明的起源

ZK证明最初在1985年麻省理工学院的一篇研究论文中提出,其中一位作者Silvio Micali(这哥们后来创立了Algorand区块链)。像许多技术一样,ZK证明首先吸引了大部分理论上的关注,然后在进一步发展和完善后最终找到了实际用途。


最早的ZK证明是互动的。为了证明一些东西,我们必须和验证者玩一个像测谎仪一样的游戏。一方提问,另一方回答,直到确定真相为止。


最近的ZK 证明是非交互式的。我们现在可以生成一块数据作为我们的ZK证明,然后可以把它提交给验证者而不需要几轮的沟通。这些新的ZK证明不太像游戏/文件/协议,而更像可以由验证者生成并提交给验证者的不可伪造的物品。


ZK证明的用途

有两个主要的ZK用例。


1. 隐私:


当我们在区块链上进行活动时,可以尽量减少公开的数据量。利用ZK证明来保护隐私的项目包括IronFish、Worldcoin和TornadoCash(这个最近大热,具体看老雅痞的公众号)。


2.可扩展性:


ZK证明允许在链外进行更便宜的密集计算来创建一个简洁的证明(表明真正进行了计算)。然后将该证明公布在链上。


我喜欢把这想象成技术分工。链上和链下的系统分别专注于他们最擅长的事情。我们可以使用集中、高性能、非链式的系统来快速有效地处理一大堆交易,然后使用一个去中心化、不可变的、不可信任区块链作为记录谁拥有什么的最终事实源。


现实

现实中会发现,ZK证明的两个用途:可扩展性与它们的零知识属性(隐私)无关。最近大热的ZK-rollup技术通常并不关心向验证者隐藏某些信息,他们只关心相对于ZK 证明所要证明的所有链外交易的有效性而言,ZK证明是足够小,而且验证起来非常快。


ZK-Rollup 的工作方式

在理解了ZK 证明之后,我们了解一下ZK-rollup的工作方式。


我们可以把 ZK-rollup 理解成:

  1. 我们不在以太坊上运行计算,因为以太坊的计算速度很慢,成本很高。我们在链外(即在第二层(L2)区块链上)做这项工作;

  2. 我们创建一个证明,证明诚实地运行了所有的交易;以及

  3. 我们在以太坊上发布这个证明。


对于用户来说,这实际上是什么样子的呢?


我们找一个感兴趣的ZK-rollup项目(比如 polygon)。为了使用这个项目(L2链)上的某个 NFT,我们会进行这样的流程:


  1. 发送一些ETH到该项目在以太坊上的智能合约,该合约将我们的资金存储/锁定起来。


  2. 经过短暂的延迟后,L2链会知道我们已经锁定了这些资金,它将解锁等价 代币供我们在L2上使用。这是一个很典型的桥接过程。


  3. 我们可以使用解锁的代币在L2上尽情地玩耍。我们可以交换它们,投资它们,用它们来购买NFT。定期(通常在几分钟内),这些活动会打包(rollup)为一个证明(ZK 证明),并发送到以太坊,以最终确定最近在L2上发生的所有活动。


  4. 我们在L2上玩得很开心,但现在玩够了,想把代币兑现为 ETH,即要把资金撤回到以太坊。要做到这一点,我们把L2代币发送到L2链上的一个燃烧地址,并等待证明我们这样做的rollup在以太坊上公布。一旦公布了,我们锁定在以太坊智能合约中的资金(ETH)就会被解锁, 我们就可以取回 ETH。


这听起来很复杂,但每个 L2链上的应用能够封装所有的细节,使我们尽可能对整个提款过程无感。



总结


总的来说,因为利用ZK证明,能够再创建一个证明 "是的,这几亿次的计算都被100%正确地解决了",验证者可以确认该证明是正确的,而无需自己运行这几亿次的计算。我们可以将验证过程和计算过程分配给不同的链,从而解决以太坊原生的各种问题(计算速度很慢,成本很高)。这也是 ZK-Rollup 最近大热的原因。


声明:文中观点基于公开市场信息和历史数据形成,不作为直接投资建议,仅供交流,欢迎留言探讨投资见解。


推荐阅读

什么是SocialFi?| Web3学习专栏(1)

一文搞懂CEX和DEX | Web3学习专栏(2)

学习Web3 经济模型,从代币类型开始| Web3学习专栏(3)

Meta系公链姐妹花,拿过亿融资的Sui与Aptos谁更值得押注?| 重构原创

距离你成为Web3专家,只差一个「重构研究院」!


扫码关注微信公众号

重构研究院助手微信号: Nov_i05 ♦

点击“分享、点赞、在看”,收获更多优质内容!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存